package com.liulei.controller;

import com.liulei.entities.Customer;
import com.liulei.service.CustomerService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import java.util.List;

/**
 *
 * 客户管理控制器，处理客户管理所有的请求
 */

@Controller
@RequestMapping("/cust")
@Slf4j
public class CustomerController {
    /**
     * 控制器依赖业务逻辑，按照类型自动装配CustomerService对象
     */
    @Autowired
    private CustomerService customerService;

    /**
     * 用户点击"客户管理"超链接按钮，显示所有的客户信息
     * 步骤：
     * 1 调用CustomerService对象的listCustomer方法查询所有的客户信息
     * 2 将客户信息渲染到客户列表页面
     * 3 跳转到客户列表页面
     * @param model 在前端和后端之间传递数据的对象
     * @return 客户列表页面
     */

    @RequestMapping("/listCust")
    public String listCustomer(Model model) {
        List<Customer> custList = customerService.listCustomer();
        model.addAttribute("custList",custList);
        return "customerList";
    }

    /**
     * 点击“添加”按钮跳转到“添加客户”页面
     * @return “添加客户”页面
     */
    @RequestMapping("/preSaveCust")
    public String preSaveCust() {
        return "custSave";
    }

    /**
     * 添加客户信息，将表单输入的客户信息持久化到数据库中，添加成功返回客户列表页面
     * @param customer
     * @return
     */

    @RequestMapping (value = "/saveCust",method = RequestMethod.POST)
    public String saveCust(Customer customer) {
        customerService.saveCustomer(customer);
        //重定向到客户列表，将新添加的客户信息显示到客户列表
        return "redirect:/cust/listCust";
    }

    /**
     * 根据客户名称搜索满足条件的客户信息
     * @param custName 客户名称
     * @param model
     * @return 客户列表页面
     */

    @RequestMapping("/searchCustomer")
    public String searchCustomer(String custName,Model model) {
        log.info("search custName = "+custName);
        List<Customer> custList = customerService.searchCustomer(custName);
        //满足条件的客户列表渲染到页面
        model.addAttribute("custList",custList);
        model.addAttribute("searchName",custName);
        return "customerList";
    }

    /**
     * 根据客户ID删除客户信息，返回客户列表页面，显示删除之后的客户列表
     * @param cid 客户id
     * @return 客户列表
     */
    @RequestMapping("/delCust/{cid}")
    public String deleteCustomer(@PathVariable("cid") Integer cid) {
        log.info("delete customer cid = "+ cid);
        int rows = customerService.deleteCustomerById(cid);
        log.info("delete customer rows = "+rows);
        //查询已删除的客户列表信息
        return "redirect:/cust/listCust";
    }


    /**
     * 点击“修改”按钮，页面传入的客户ID查询对应的客户信息，将查询的信息渲染到“修改客户”页面
     * @param cid 客户ID在`CustomerController`控制器新增`preUpateCustomer`方法完成数据的回显。
     * 调用`CustomerService`接口的`getCustomerById`方法，将客户信息渲染到页面。
     * @param model
     * @return “修改客户”页面
     */

    @RequestMapping("/preUpdateCust/{cid}")
    public String preUpdateCustomer(@PathVariable("cid") Integer cid,Model model) {
        log.info("update Customer cid = "+cid);
        Customer cust = customerService.getCustomerById(cid);
        model.addAttribute("cust",cust);
        //返
        return "custUpdate";
    }

    @RequestMapping(value = "/updateCust",method = RequestMethod.POST)
    public String updateCustomer(Customer customer) {
        log.info("update customer = "+customer);
        int rows = customerService.updateCustomer(customer);
        log.info("update rows = "+rows);
        //修改工程查询客户列表，跳转到客户界面
        return "redirect:/cust/listCust";
    }
}
